package com.ytzq.base.config;

import java.lang.reflect.Field;
import java.util.List;
import java.util.Map;
import java.util.HashMap;

import com.ytzq.base.constants.CONFIG;
import com.ytzq.base.constants.LOG_TYPE;
import com.ytzq.base.jdbc.DataRow;
import com.ytzq.base.log.Logger;
/**
 * 系统参数配置类
 * @author 门士松  20121030
 * @version 1.0
 * @since
 */
public class Config{
	//日志
	private Logger logger = Logger.getLogger(this.getClass());  
	//参数map对象
    private static Map<String,String> items = new HashMap<String,String>();
    //参数服务类
    ConfigService configService = new ConfigService();
    /**
     * 初始化：读取数据库中的参数信息
     */
    public void init(){
    	
		try {
	    	List<DataRow> dataRowlist=configService.selectAll();
			String details = "";
			for(DataRow dataRow : dataRowlist){
				details=details+dataRow.toString()+"\n";
			}
	    	logger.debug(LOG_TYPE.SYSTEM, "从数据库读取配置参数成功,内容为:", details);
	    	if(dataRowlist!=null&&dataRowlist.size()>0){
	    		for(DataRow dataRow :dataRowlist){
	    			//设置参数类别，参数名称，参数值
	    			Config.setConfig(dataRow.getString("name"),dataRow.getString("value"));
	    		}
	    	}
	    	insert();
		} catch (Exception e) {
			e.printStackTrace();
			logger.error(LOG_TYPE.SYSTEM, e);
		}
    }
    /**
     * 将数据库缺少的参数名插入到数据库
     */
    private void insert(){
		try {
	    	//如果没有相关参数则进行初始化操作
			Class<?> clazz = CONFIG.class;
	    	Field[] fds = clazz.getFields();
			for (Field f : fds) {
				String name = f.get(clazz.newInstance()).toString();
				if (Config.getString(name) == null) { // 如果数据库没参数，则插入一条空值参数
					configService.insertParameter("not_defined", name,"not_defined", "该参数为系统初始化时自动生成，具体值需重新设定");
				}
	    	}
		} catch (Exception e) {
			logger.error(LOG_TYPE.SYSTEM, e);
		}
    }
    /**
     * 获得字串配置值
     */
    public static String getString(String name){
    	return items.get(name);
    }
    /**
     * 添加参数配置
     */
    public static void setConfig(String name , String value){
    	items.put(name, value);
    }   
    /**
     * 获得整型配置值
     */
    public static Integer getInt(String name){
            return Integer.parseInt(items.get(name));
    }
    /**
     * 获得布尔型配置值
     */
    public static Boolean getBoolean(String name){
        String value = getString(name);
        if("1".equals(value)||"是".equals(value)||"true".equalsIgnoreCase(value)||"yes".equalsIgnoreCase(value)){
        	return true;
        }else{
            return Boolean.valueOf(value);
        }
    }
}
